import { defineStore } from 'pinia'
import { api } from '../api'

export const useUserStore = defineStore('user', {
  state: () => ({
    userInfo: {
      id: '', // users表的主键id
      username: '',
      realName: '',
      stuNum: '',
      age: '',
      email: '',
      className: '',
      isLogin: false
    },
    token: ''
  }),
  
  getters: {
    isAuthenticated: (state) => state.userInfo.isLogin,
    getUserInfo: (state) => state.userInfo
  },
  
  actions: {
    // 登录方法
async login(userData) {
  try {
    console.log('登录请求数据:', userData);
    // 验证输入数据完整性
    if (!userData || !userData.username || !userData.pwd) {
      console.error('登录数据不完整:', userData);
      return { success: false, message: '用户名或密码不能为空' };
    }
    
    const response = await api.user.login(userData)
    console.log('登录响应数据:', response);
    
    // 检查响应是否有效
    if (!response) {
      console.error('登录响应为空');
      return { success: false, message: '服务器未响应，请稍后重试' };
    }
    
    // 处理API响应格式 - 根据错误日志，API返回的是errno而不是success
    if (response.errno === 0) {
      // errno为0表示成功
      // 保存用户信息，API返回的用户数据在response.data中
      this.userInfo = {
        ...(response.data || {}), // 使用response.data获取用户数据
        username: response.data?.username || response.username || userData.username, // 确保用户名存在
        isLogin: true
      }
      
      // 保存token - 适配可能的不同字段名和来源
      // 1. 首先检查完整响应对象中的headers是否包含Server-Authorization
      const tokenFromHeaders = response.headers?.['server-authorization'] || response.headers?.['Server-Authorization'] || '';
      // 2. 然后尝试从响应体的不同位置提取token
      this.token = tokenFromHeaders || response.token || response.data?.token || ''
      
      console.log('登录成功后保存的用户信息:', this.userInfo);
      console.log('登录成功后保存的token:', this.token);
      
      // 将用户信息存储到localStorage
      localStorage.setItem('userInfo', JSON.stringify(this.userInfo))
      localStorage.setItem('token', this.token)
      
      return { success: true, message: '登录成功' }
    } else {
      // 登录失败
      console.log('登录失败原因:', response.message || response.error || '未知错误');
      return { success: false, message: response.message || response.error || '登录失败' }
    }
  } catch (error) {
    console.error('登录错误:', error);
    console.error('错误详情:', {
      message: error.message,
      stack: error.stack,
      response: error.response || '无响应'
    });
    
    // 提供更具体的错误信息
    if (error.code === 'ECONNABORTED') {
      return { success: false, message: '请求超时，请检查网络连接' };
    }
    if (error.code === 'ERR_NETWORK') {
      return { success: false, message: '网络错误，请检查网络连接' };
    }
    
    return { success: false, message: '登录失败，请稍后重试' };
  }
},
    
    // 注册方法
async register(userData) {
  try {
    console.log('注册请求数据:', userData);
    const response = await api.user.register(userData)
    console.log('注册响应数据:', response);
    
    if (response.success) {
      return { success: true, message: '注册成功' }
    } else {
      console.log('注册失败原因:', response.message);
      return { success: false, message: response.message || '注册失败' }
    }
  } catch (error) {
    console.error('注册错误:', error)
    return { success: false, message: '网络错误，请稍后重试' }
  }
},
    
    // 退出登录方法
    logout() {
      // 清空用户信息
      this.userInfo = {
        username: '',
        realName: '',
        stuNum: '',
        age: '',
        email: '',
        className: '',
        isLogin: false
      }
      
      // 清空token
      this.token = ''
      
      // 从localStorage移除用户信息
      localStorage.removeItem('userInfo')
      localStorage.removeItem('token')
    },
    
    // 从localStorage加载用户信息
    loadUserInfo() {
      try {
        const userInfo = localStorage.getItem('userInfo')
        const token = localStorage.getItem('token')
        
        if (userInfo && token) {
          this.userInfo = JSON.parse(userInfo)
          this.token = token
        }
      } catch (error) {
        console.error('加载用户信息错误:', error)
        this.logout()
      }
    },
    
    // 更新用户信息
    updateUserInfo(newInfo) {
      this.userInfo = {
        ...this.userInfo,
        ...newInfo
      }
      
      // 更新localStorage中的用户信息
      localStorage.setItem('userInfo', JSON.stringify(this.userInfo))
    }
  }
})